package cn.b.sky.mes.pp.service;

import java.util.List;

import cn.b.sky.mes.andon.model.AndonConfig;
import cn.b.sky.mes.mm.model.Requirement;
import cn.b.sky.mes.pp.model.OperationTaskConfirm;
import cn.b.sky.mes.pp.model.ProductionConfirm;
import cn.b.sky.mes.pp.model.ProductionControl;
import cn.b.sky.mes.pp.model.ProductionOrder;

/**
 * 
 * <strong>Title : RequirementStrategyService.java<br></strong>
 * <strong>Package : cn.b.sky.mes.mm.service<br></strong>
 * <strong>Description : </strong>需求策略服务接口<br> 
 * <strong>Create on : 2016年9月13日 上午9:40:55<br></strong>
 * <p>
 * @author dapeng.li<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人|修改日期|修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
public interface RequirementStrategyService {

  /**
   * 
   * <strong>Title : isPullStrategyEnable<br></strong>
   * <strong>Description : </strong>是否启用了物料拉动策略<br> 
   * <strong>Create on : 2016年9月19日 下午1:53:56<br></strong>
   * <p>
   * @return
   * boolean
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  boolean isPullStrategyEnable();

  /**
   * 
   * <strong>Title : createProductionOrderRequirements<br></strong>
   * <strong>Description : </strong>产生订单配额需求<br> 
   * <strong>Create on : 2016年9月13日 上午10:07:08<br></strong>
   * <p>
   * @param productionOrder 生产订单
   * @param productionControls 当前下达产生的生产管理号
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void createProductionOrderRequirements(ProductionOrder productionOrder, List<ProductionControl> productionControls);

  /**
   * 
   * <strong>Title : insertManualRequirement<br></strong>
   * <strong>Description : </strong>创建手工物料需求<br> 
   * <strong>Create on : 2016年9月13日 下午3:45:02<br></strong>
   * <p>
   * @param requirement
   * String
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  String insertManualRequirement(Requirement requirement);

  /**
   * 
   * <strong>Title : createSafetyInventoryRequirements<br></strong>
   * <strong>Description : </strong>安全库存需求（管理号报工）<br> 
   * <strong>Create on : 2016年9月14日 下午3:18:44<br></strong>
   * <p>
   * @param confirm
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void createSafetyInventoryRequirements(ProductionConfirm confirm);

  /**
   * 
   * <strong>Title : createSafetyInventoryRequirements<br></strong>
   * <strong>Description : </strong>安全库存需求（工序报工）<br> 
   * <strong>Create on : 2016年9月18日 上午9:40:32<br></strong>
   * <p>
   * @param confirm
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void createSafetyInventoryRequirements(OperationTaskConfirm confirm);

  /**
   * 
   * <strong>Title : createAndonRequirement<br></strong>
   * <strong>Description : </strong>创建按灯需求<br> 
   * <strong>Create on : 2016年9月18日 下午5:01:40<br></strong>
   * <p>
   * @param andonConfig
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void createAndonRequirement(AndonConfig andonConfig);
}
